//============================================================================
/// \file   PushButton.cpp
/// \author Uwe Kindler
/// \date   18.10.2022
/// \brief  Implementation of CPushButton
//============================================================================

//============================================================================
//                                   INCLUDES
//============================================================================
#include "PushButton.h"

#include <QPainter>
#include <QStyleOptionButton>
#include <QDebug>
#include <QStylePainter>


namespace ads
{
// 定义 CPushButton 类的 sizeHint 函数
QSize CPushButton::sizeHint() const
{
    // 调用 QPushButton 的 sizeHint 函数
    QSize sh = QPushButton::sizeHint();
    // 如果方向不是水平的
    if (m_Orientation != CPushButton::Horizontal)
    {
        // 调用 transpose 函数进行转置
        sh.transpose();
    }
    // 返回 sizeHint
    return sh;
}

// 定义 CPushButton 类的 paintEvent 函数
void CPushButton::paintEvent(QPaintEvent *event)
{
    // 忽略 event 参数
    Q_UNUSED(event);
    // 创建一个 QStylePainter 对象
    QStylePainter painter(this);
    // 创建一个 QStyleOptionButton 对象
    QStyleOptionButton option;
    // 初始化 option
    initStyleOption(&option);
    // 如果方向是从上到下的
    if (m_Orientation == CPushButton::VerticalTopToBottom)
    {
        // 旋转 90 度
        painter.rotate(90);
        // 向上平移一个按钮的宽度
        painter.translate(0, -1 * width());
        // 转置 option 的矩形
        option.rect = option.rect.transposed();
    }
    // 如果方向是从下到上的
    else if (m_Orientation == CPushButton::VerticalBottomToTop)
    {
        // 旋转 -90 度
        painter.rotate(-90);
        // 向左平移一个按钮的高度
        painter.translate(-1 * height(), 0);
        // 转置 option 的矩形
        option.rect = option.rect.transposed();
    }
    // 绘制控件
    painter.drawControl(QStyle::CE_PushButton, option);
}

// 定义 CPushButton 类的 buttonOrientation 函数
CPushButton::Orientation CPushButton::buttonOrientation() const
{
    // 返回方向
    return m_Orientation;
}

// 定义 CPushButton 类的 setButtonOrientation 函数
void CPushButton::setButtonOrientation(Orientation orientation)
{
    // 设置方向
    m_Orientation = orientation;
    // 更新几何形状
    updateGeometry();
}
} // namespace ads

//---------------------------------------------------------------------------
// EOF PushButton.cpp
